#include<iostream>
#include<deque>
#include<vector>
#include<list>
#include<stack>
using namespace std;

#include"stack.h"
#include"queue.h"

//int main()
//{
//	//Aron::stack<int, vector<int>> s;
//	Aron::stack<int, list<int>> s;
//	//Aron::stack<int, deque<int>> s;
//	//Aron::stack<int> s;
//
//	s.push(1);
//	s.push(2);
//	s.push(3);
//	s.push(4);
//
//	while (!s.empty())
//	{
//		cout << s.top() << " ";
//		s.pop();
//	}
//	cout << endl;
//
//	return 0;
//}


//int main()
//{
//	Aron::queue<int> q;
//
//	//Aron::queue<int, vector<int>> q;
//	//Aron::queue<int, list<int>> q;
//
//	q.push(1);
//	q.push(2);
//	q.push(3);
//	q.push(4);
//	
//	while (!q.empty())
//	{
//		cout << q.front() << " ";
//		q.pop();
//	}
//	cout << endl;
//
//	return 0;
//}

namespace Aron
{
	template<class T>
	class less
	{
	public:
		bool operator()(const T& x, const T& y)
		{
			return x < y;
		}
	};

	template<class T>
	class greater
	{
	public:
		bool operator()(const T& x, const T& y)
		{
			return x > y;
		}
	};

	template<class Compare>
	class A
	{
	public:
		void func(int xx,int yy)
		{
			Compare com;
			cout << "void com(int xx,int yy)" << com(xx, yy) << endl;
		}
		
	};
}

int main()
{
//	Aron::A<Aron::less<int>> aa1;
//	aa1.func(1,3);
//
//	Aron::A<Aron::greater<int>> aa2;
//	aa2.func(4, 5);
//
//	Aron::less<int> lessfunc;
//	cout << lessfunc(2, 3) << endl;
//
//	Aron::greater<int> greaterfunc;
//	cout << greaterfunc(8, 0) << endl;

	Aron::priorety_queue<int> pq;

	pq.push(1);
	pq.push(2);
	pq.push(3);
	pq.push(4);

	while (!pq.empty())
	{
		cout << pq.top() << " ";
		pq.pop();
	}
	cout << endl;

	return 0;
}